iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
Odoo

Odoo開發系列 第 12

[Day 12] odoo14 - 建立report(二)

  • 分享至 

  • xImage
  •  

昨天交大家教建立完報表的model後,要換來建立報表的模板了。
範例如下:

<report
        id="idx_repair_report"
        string="維修單"
        model="idx.repair"
        report_type="qweb-pdf"
        name="idx_interview.idx_repair_template"
        file="idx_interview.idx_repair_template"
/>

<template id="idx_repair_template">
    <t t-call="web.html_container">
        <t t-foreach="docs" t-as="o">
            <t t-call="web.external_layout">
                <div class="page">
                    <h4>維修單</h4>
                    <p t-field="o.name"/>
                    <table class="table table-sm table-bordered">
                        <tr>
                            <td>
                                <strong>客戶</strong>
                            </td>
                            <td>
                                <span t-field="o.partner_id"/>
                            </td>
                            <td>
                                <strong>報修日期</strong>
                            </td>
                            <td>
                                <span t-field="o.repair_date"/>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <strong>報修原因</strong>
                            </td>
                            <td>
                                <span t-field="o.reason"/>
                            </td>
                        </tr>
                    </table>
                    <h5>維修內容</h5>
                    <table class="table table-sm">
                        <thead>
                            <tr>
                                <th>內部編號</th>
                                <th>名稱</th>
                                <th>數量</th>
                                <th>單價</th>
                                <th>合計</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr t-foreach="o.repair_detail" t-as="detail">
                                <t>
                                    <td>
                                        <span t-field="detail.product_id.name"/>
                                    </td>
                                    <td>
                                        <span t-field="detail.default_code"/>
                                    </td>
                                    <td>
                                        <span t-field="detail.qty"/>
                                    </td>
                                    <td>
                                        <span t-field="detail.price_unit"/>
                                    </td>
                                    <td>
                                        <span t-field="detail.amount"/>
                                    </td>

                                </t>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </t>
        </t>
    </t>
</template>

<report>內含的參數:

  • id:紀錄report的id。
  • string:設定在畫面上列印按鈕中顯示的名稱。
  • model:設定要使用此報表的model。
  • report_type:設定報表列印時的形式,若設置為report_type='qweb-pdf'時,會列印出PDF報表,若設置為report_type='qweb-html'時,會以網頁開啟列印出來的報表。
  • name:用於關聯template的資料,設置上與下方<template>中設定的id有關,固定設定為model名稱 + template的id
  • file:用於關聯template的資料,設置上與下方<template>中設定的id有關,固定設定為model名稱 + template的id
  • report_name:列印報表時的名稱(列印PDF時的檔案名稱),可使用object來抓取當筆資料,範例:
<field name="print_report_name">'%s' % (object.name)</field>
  • groups:該報表僅能給擁有權限的使用者列印。

<template>為報表的模板,在撰寫某些語法時與HTML有點相像,但有些css或style不盡相同,下面簡單的介紹報表中常見的幾個部分:

  • id:自訂義即可,不可重複。
  • <t>:為odoo的框架,用來處理報表上各欄位的值。
  • <t t-foreach='' t-as=''>:用來對資料做for迴圈處理,若同時傳遞多筆資料時,報表可依每筆資料分開顯示。
  • <t t-call>:用來call其他模板,通常用於讓報表加上基本的header與footer
  • t-field:用來呈現欄位的值。

記得撰寫完report的模板後,要在__menifest__.py中的data加上report模板檔案的路徑,才會在畫面上看到列印報表的按鈕。
https://ithelp.ithome.com.tw/upload/images/20230927/20163263vHmyvUtfVQ.png

根據上面的範例,列印出來的報表會長這個樣子:
https://ithelp.ithome.com.tw/upload/images/20230927/20163263MFwQoyprkn.png

odoo的報表部分就先到這邊。


上一篇
[Day 11]odoo14 - 建立report(一)
下一篇
[Day 13] odoo14 - menu及action介紹
系列文
Odoo開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言